package com.softline.documentsmall.dao;

import com.softline.documentsmall.entity.Dictionary;
import com.softline.documentsmall.entity.DictionaryVO;
import com.softline.documentsmall.entity.IndexDictionaryVo;
import org.apache.ibatis.annotations.Param;
import org.mapstruct.Mapper;
import java.util.List;
import java.util.Map;

@Mapper
public interface DictionaryMapper {

    Dictionary findById(@Param("id") Integer id);

    Integer findMaxId();

    Dictionary isProfessional(@Param("type") String type, @Param("value") String value);

    /**
     * 查询以传入的参数开头的术语，根据语种查询
     *
     * @param type
     * @param value
     * @return
     */
    List<Dictionary> selectDictionaryByValue(@Param("type") String type, @Param("value") String value);

    List<IndexDictionaryVo> search(@Param("type") String type, @Param("value") String value, @Param("pageNo") Integer pageNo, @Param("pageSize") Integer pageSize);

    /**
     * 查询所有词条
     *
     * @return
     */
    List<Dictionary> findAll();

    /**
     * 查询部分词条
     *
     * @return
     */
    List<Dictionary> find(@Param("pageNo") Integer pageNo, @Param("pageSize") Integer pageSize);

    /**
     * 点赞排行榜列表页查询
     *
     * @param pageNo
     * @param pageSize
     * @param type
     * @return
     */
    List<DictionaryVO> listByThumbsUpRanking(@Param("pageNo") Integer pageNo, @Param("pageSize") Integer pageSize, @Param("type") String type);

    /**
     * 查询词条记录数
     *
     * @return
     */
    Long selectCount();

    /**
     * 根据ID批量查询词典表
     *
     * @param byKeyword
     * @return
     * @author wph
     */
    List<Dictionary> findByListId(@Param("byKeyword") List<Long> byKeyword);

    /**
     * 根据语种类别和分类表ID去查询对应四级词条名称和ID
     *
     * @param id
     * @param type
     * @return
     */
    List<Dictionary> selectFourList(@Param("id") Integer id, @Param("type") String type);

    /**
     * 根据多级分类表ID和名字查询不是当前名字的三条词和对应ID
     *
     * @param newDictionary
     * @return
     */
    List<Map<String, Object>> selectFourDictionary(Dictionary newDictionary);

    /**
     * 查询搜索时总数
     * @param type
     * @param value
     * @author wph
     * @return
     */
    int searchCount(String type, String value);

    int deleteByPrimaryKey(Integer id);


    int insertSelective(Dictionary record);

    Dictionary selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(Dictionary record);

    int updateByPrimaryKey(Dictionary record);

    List<Dictionary> selectList(@Param("id")Integer id,@Param("title")String title,@Param("pageNo") int pageNo,@Param("pageSize") Integer pageSize);

    Long selectLocalCount(Integer id, String title);

    Long selectThumbsUpCount(@Param("type")String type);

    /**
     * 根据一级术语查询3个其他一级术语
     * @param type
     * @param name
     * @return
     */
    List<IndexDictionaryVo> selectLevelOneDictionary(@Param("type")String type, @Param("name")String name);

    List<Map<String, Object>> selectFourDictionaryOnNegative(Dictionary newDictionary);

    /**
     *
     * @param type 术语语种类型
     * @param value 术语名字
     * @return
     */
    Dictionary selectTwoLevelDictionary(@Param("type") String type, @Param("value") String value);
}
